/******************************************************************************* 
  Copyright (C), 1988-2020, zeno Tech. Co., Ltd.
  Description:  VIDEO模块内部头文件
  Function List:
            
*******************************************************************************/
              
#ifndef VIDEO_PRIV_H
#define VIDEO_PRIV_H

/*=============================================================================
                                 Includes                                  
==============================================================================*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/poll.h>
#include <sys/time.h>
#include <fcntl.h>
#include <errno.h>
#include <pthread.h>
#include <math.h>
#include <unistd.h>
#include <signal.h>   
#include <sys/mman.h>   
#include <signal.h> 
#include <stdint.h>
#include <sys/reboot.h>
#include <sys/prctl.h>

#include "VideoDec.h"
#include "VideoEnc.h"
#include "VideoDetect.h"
#include "VideoAnalyse.h"
#include "VideoOut.h"
#include <stddef.h>

#include "list.h"
#include "log.h"
#include "cfg.h"
#include "gpio.h"
//#include "mdAlg.h"
#include "sysIf.h"
#include "sysIrcut.h"
#include "sysPack.h"
#include "sysDebug.h"
#include "sysBmp.h"

#include "ini.h"

#include "analyse.h"
#include "videoIsp.h"
#include "videoComm.h"
#include "Graphics.h"
#include "znivs.h"
#include <stddef.h>
#include <sys/syscall.h>

#include "rkmedia_buffer.h"
#include "rkmedia_api.h"
#include "rkmedia_venc.h"
#include "im2d.h"
#include "rga.h"
#include "rockx_type.h"

#include "SDL.h"
#include "SDL_ttf.h"


#include "videoRkVi.h"
#include "readsense_algo_sdk.h"
#include "StreamComposeMgr.h"

#include "rk628dDrv.h"

#ifdef __cplusplus
extern "C" {
#endif

/*=============================================================================
                               Macro Definition
==============================================================================*/
/* 单次从海思编码库上获取的数据包数，连续模式下，只能是1 */
#define ENC_MAX_PACK_COUNT              24
#define ENC_PACKET_NUM                  (24 + 4)      /* 单帧数据子数据个数 */
#define ENC_SUPPORT_CHN                 6       /* 支持的通道数 */
#define ENC_STREAM_PER_CHN              4       /* 每个通道支持的码流数 */

#define ENC_COVER_NUM                   4       /* 遮挡区域支持个数 */
#define ENC_TITLE_NUM                   8       /* OSD区域支持个数 */
#define ENC_BMP_NUM                     4       /* BMP图片支持个数 */

#ifdef HI3516EV200
#define ENC_TITLE_BUF                   (1024*32*2) /* OSD区域缓存大小 */
#else
#define ENC_TITLE_BUF                   (1024*32*5) /* OSD区域缓存大小 */
#endif

#define ENC_WARTERMARK_LEN              128     /* 水印最大长度 */
#define ENC_WARTERMARK_BUF_LEN          256     /* 水印最大长度 */

#define VIDEO_ALIGN_UP(i, n)          (((i) + (n) - 1) & ~((n) - 1))
#define VIDEO_ALIGN_DOWN(i, n)        ((i) & ~(n - 1))

#define DETECT_MOTION_WINDOE_NUM        16 

#define MAX_ROI_NUM                     4

#define VIDEO_MMZ_BUF_NUM               32       

#define  VIDEO_SND_VPSS_CHN             1      /* 动检使用的VPSS CHANNEL */

#define MAX_VI_SUPPORT_CHN              VI_MAX_CHN_NUM       /* 输入支持的最大通道数 */

#define VIDEO_INI_CFG                   "/mnt/mtd/video.cfg"

#define VO_SUPPORT_CHN                  1       /* 支持的通道数 */

#if defined(HI3516EV200)
#define WDR_MAX_PIPE_NUM        2
#else
#define WDR_MAX_PIPE_NUM        4
#endif

#define VOUT_VPSS_CHN		     VIDEO_SND_VPSS_CHN /*与VO绑定的VPSS通道号*/

#define MAX_LIST_NUMS   16

#define gettid() syscall(__NR_gettid)

#define ANALYSER_WARN_NUM       10              /* 最大算法报警数 */
#define ANALYSER_TRACE_NUM      32              /* 最大算法跟踪数 */
#define ANALYSER_EVEN_NUM       32              /* 最大事件数 */
#define ANALYSER_FREMA_NUM      32   
#define ANALYSER_OBJ_NUM        64             /* 最大对象数 */

#define VIDEO_STREAM_MAX_CHN_NUMBER (8)
#define VIDEO_STREAM_MAX_CNT (8)

#define VIDEO_STREAM_1080P_LIST_CHN (0)
#define VIDEO_STREAM_720P_LIST_CHN  (1)

#define VIDEO_STREAM_FIXED_SENSOR_PIP_LIST_CHN  (2)
#define VIDEO_STREAM_FIXED_SENSOR_PIP_WID  (576)
#define VIDEO_STREAM_FIXED_SENSOR_PIP_HEI  (324)

#define VIDEO_SHOW_OSD_PICTURE_TIME (90)
#define VIDEO_ENC_MEIDA_CNT (3)

#define COMPOSE_MAX_CHN_NUM     MAX_STREAM_NUM


#define HDMI_WIDTH 1920
#define HDMI_HEIGHT 1080

#define DEBUG_PRINT 0
#define MIRROR_STREAM_INDEX (7)

/*=============================================================================
                        Local Structures and Typedef 
==============================================================================*/ 
typedef enum hiVICHN
{
    VIN_CHN_PHY = 0,
    VIN_CHN_EXT0,
} VIN_CHN_ID;

typedef enum
{
    VPSS_GROUP_PHY = 0,
    VPSS_GROUP_EXT0,
} VPSS_GROUP_ID;

/* 传给应用层的数据缓存 */
typedef struct
{
    unsigned char *pRawBuf;               /* 海思编码buf的指针 */
    unsigned char headBuf[44];            /* 存放帧头数据 */
    unsigned char tailBuf[8];             /* 存放帧尾数据 */
}VIDEO_packetBuf_t;

/* cover控制结构体 */
typedef struct
{
    RECT_S rect;
    VideoCover videoCover;          /* cover配置参数 */
} ENC_cover_t;

/* osd叠加模式 */
typedef enum
{
    ENC_OSDTYPE_TRAN = 0, /* 半透明 */
    ENC_OSDTYPE_CRIS = 1, /* 勾边 */
} ENC_osdType_t;

/* title控制结构体 */
typedef struct
{
    int type;                       /* osd叠加模式，定义见ENC_osdType_t */
    unsigned char *pTitleBuf;       /* title缓存 */
    unsigned int titleLen;          /* 标题长度 */
    VideoTitle videoTitle;          /* title配置参数 */
} ENC_title_t;

/* water控制结构体 */
typedef struct
{
    char                enable;         /* 水印是否使能 */
    unsigned char       data[ENC_WARTERMARK_LEN];      /* 水印数据 */
    int                 dataLen;        /* 水印数据有效长度 */
} ENC_waterMark_t;

/* 录像控制结构体 */
typedef struct
{
	int recordFd; 		     /* 录像文件描述符 */
	int recordFlag;          /* 是否录像 */
    unsigned int streamId;   /* 码流类型 */
    unsigned int frameNum;   /* 录像的帧数 */
    unsigned int isPackData; /* 是否封装 */
    char recordPath[32];     /* 存储录像的路径 */
    char recordName[32];     /* 录像名 */
} ENC_recordData_t;

typedef struct
{
    struct list_head list;
    VideoObjectPacket objPacket;
} NEC_listObjPacket_t;

typedef struct
{
    struct list_head list;
    //VIDEO_FRAME_INFO_S frame;
} NEC_listFrameInfo_t;

typedef struct
{
    struct list_head list;
    char *pBuf;
    int len;
    int isIframe;
    int encType;
    uint64 pts;
    MEDIA_BUFFER buffer;
} NEC_listBufInfo_t;

typedef struct
{
    int  x;
    int  y;
} ENC_ImagePonit_t;

typedef struct
{
    int  wid;
    int  hei;
    int  wstride;
    int  hstride;
} ENC_ImageRect_t;

typedef struct
{
    char    *pBuf;
    int     len;
    int     format;
    uint64  pts;
    ENC_ImageRect_t stRect;
    int camId;

    void* revered;
} ENC_ImageBufInfo_t;

typedef struct
{
    struct list_head   list;
    ENC_ImageBufInfo_t stImageBufInfo;

    void* revered;
} ENC_listImageBufInfo_t;

typedef struct
{
    ENC_listImageBufInfo_t stImageBufList[VIDEO_STREAM_MAX_CNT];
    pthread_mutex_t    listMutex;
    pthread_cond_t     listCondAttr;
    struct list_head   emptyBuf;            /* 空闲跟踪队列 */
    struct list_head   fullBuf;             /* 跟踪队列 */


} ENC_ImageBufCtrl_t;

/* osd数据结构体*/
typedef struct
{
    unsigned char *pData;       /* osa数据 RGB1555格式 */

    /* osd区域大小 */
    unsigned int x;             
    unsigned int y;
    unsigned int width;
    unsigned int height;
    unsigned char u8Enable;
} ENC_osdData_t;

/* 编码通道控制结构体 */
typedef struct
{
    unsigned int refCount;      /* 接口引用计数 */
    unsigned int streamId;      /* 接口编号 */
    VideoEncStream encStream;   /* 码流类型号 */
    VideoEncoder videoEncoder;  /* 接口结构体 */
    unsigned int encState;      /* 码流状态 */
    VIDEO_picSize_t encPicSize; /* 编码输入分辨率 */
    unsigned int fps;           /* 帧率 */
    unsigned int newFormat;     /* 编码格式是否发生变化 */
    VideoEncPackType packType;  /* 视频打包格式 */
    VideoEncType encType;       /* 视频压缩格式 */
    VideoEncRefOptions refOptions;  /* 跳帧参数 */ 
        
    VI_PIPE viPipe;               /* vi group 编号 */
    VI_CHN viChn;               /* vi channel 编号 */
    VI_CHN_ATTR_S viChnAttr;    /* vi 物理通道静态属性 */

    VENC_CHN vencChn;               /* venc通道编号 */
    VENC_CHN_ATTR_S vencAttr;       /* venc参数 */
    VENC_RC_PARAM_S vencRcPara;     /* venc高级参数 */

	ENC_recordData_t recordData;    /* 录像控制结构体 */

    /* 数据包接收缓存
    VENC_STREAM_S vencStream;
    VENC_PACK_S packetArray[ENC_MAX_PACK_COUNT]; */
    VideoEncBuf vencBuf[ENC_PACKET_NUM];
    VIDEO_packetBuf_t vencPackets;  /* 数据帧缓存 */

    int rawLen[ENC_MAX_PACK_COUNT];
    char *pRaw[ENC_MAX_PACK_COUNT];

    /* 标志缓存中的数据帧是否已经释放 0: 未释放 1: 释放 */
    unsigned int isRelease;

    ENC_title_t encTitles[ENC_TITLE_NUM + ENC_BMP_NUM];   /* title控制结构体 */

    unsigned int waterIndex;                /* 水印序列号 */
    
    PACK_streamInfo_t streamInfo;           /* 流媒体封包控制结构体 */
    
    /* 是否打包水印帧，1:需要 0:不需要 */
    unsigned int waterPack;
    /* 前一个码流帧pts */
    unsigned long long ptsFrame;

    /* VENC通道编码缓存的起始地址和结束地址 */
    unsigned int vencPhyStart;
    unsigned int vencPhyEnd;

    Rect roiRegions[MAX_ROI_NUM];    /* roi区域 */

    unsigned int roiCount;           /* roi个数 */

    unsigned int roiQuality;         /* roi图像质量 */

    unsigned int roiNum;             /* roi上一次窗口个数 */

    uchar roiNewMode;          /* 是否使用roi新模式  1:使用新模式  0:不使用 */

    VideoEncROIWindow roiWindows[MAX_ROI_NUM];    /* roi窗口数组 */ 

    uchar backgroundFps;  /* 非ROI区域的背景帧率等级设置, 0：高，1：一般，2：差  */

    unsigned int showFrameSize;

    unsigned int isCreateVenc; /* 是否创建编码通道  1:创建  0:不创建 */
    
    unsigned int relFrames;              /* 相对前一个I帧计数 */
    unsigned int refIdrFrames;           /* 虚拟I帧相对于前一个I帧的计数 */
    unsigned int enableRefIdr;           /* 是否使能虚拟I帧 */
    
    unsigned int gop;                    /* I帧间隔 */

    unsigned int streamTatol;            /* 码流统计 */
    unsigned int framesCount;            /* 帧数统计 */
    unsigned int maxBitRate;             /* 最大码率 */

    VideoEncFormat oldFormat;            /* 老的编码格式 */

    unsigned int viVirtualChn;           /* 视频输入通道，用于鱼眼通道设置 */

    pthread_t vpssToVencThd;             /* 用户模式，vpss->venc */
    int bVpssStart;

    //struct list_head emptyObj;         	/* 空闲跟踪队列 */
	//struct list_head fullObj;         		/* 跟踪队列 */
	//pthread_mutex_t objLock;                       /* 队列锁 */
	//NEC_listObjPacket_t listObjPacket[MAX_LIST_NUMS];  	/* 跟踪结果信息 */
	//VideoObject videoObj[MAX_LIST_NUMS][32];

	//struct list_head emptyFrame;         	/* 空闲跟踪队列 */
	//struct list_head fullFrame;         		/* 跟踪队列 */
	//pthread_mutex_t frameLock;                       /* 队列锁 */
	//NEC_listFrameInfo_t listFrame[10];  	/* 跟踪结果信息 */

	struct list_head emptyBuf;         	/* 空闲跟踪队列 */
	struct list_head fullBuf;         		/* 跟踪队列 */
	pthread_mutex_t bufLock;                       /* 队列锁 */
	NEC_listBufInfo_t listBuf[5];  	/* 跟踪结果信息 */
    int needLoseFrame;
	int maxLen;

	int depthNum;
	int extDepthNum;

	VideoEncStitchCfg stitchCfg;
	int screenMode;                     /*0：单画面；1、多画面拼接*/
	NEC_listFrameInfo_t *pTmpFrame;

	pthread_t viMediaThd;

	pthread_t voMediaThd;

	int isCrop;
	int isResize;
	int isCover;

	im_rect imRect;
	im_rect imOrgRect;

    MEDIA_BUFFER pBuffer;

    NEC_listBufInfo_t *pListFrame;

	BMP_logoInfo_t logoInfo;

	VideoObjectPacket objPacket;
	VideoObject videoObj[32];
    ENC_ImageBufInfo_t stMediaMb[VIDEO_ENC_MEIDA_CNT];
    int  iSrcChn;
    int  iNoneCopy;
    int  iStretch;
    int  iFrameCnt;
    int  videoEncEnable;

    MEDIA_BUFFER encMb[2];
    uint8_t mbIndex;
    unsigned int oldWidth_s;
    unsigned int oldHeight_s;
} ENC_ctl_t;

/* ivs算法状态 */
typedef enum
{
    ANALYSER_START,
    ANALYSER_STOP
}ANALYSER_state_t;

/* 区域信息 */
typedef struct
{
    int                     warningNum;             /* 报警区域数 */
    int                     trackedNum;             /* 跟踪区域数 */
    IVS_monitorRegion_t	    warning[ANALYSER_WARN_NUM];  /* 报警区域 */
    IVS_monitorRegion_t	    tracked[ANALYSER_TRACE_NUM]; /* 跟踪区域 */
    unsigned long long      pts;                    /* 时间戳 */
}ANALYSER_regionInfo_t;

/* 视频分析控制结构体 */
typedef struct
{
    unsigned int refCount;              /* analyser 接口引用计数 */
    VideoAnalyser videoAnalyser;        /* analyser 接口结构体 */

    struct list_head ivsHead;                  /* ivs算法列表 */
    IVS_algType_t  ivsTypeMask;                /* 当前算法掩码 */ 


    int state;                                  /* 算法运行状态，定义见ANALYSER_state_t */

    int	channel;					            /* 视频分析通道号 */
    unsigned int analyseSeq;                    /* 帧序号 */
	uint64				pts;			        /* 时间戳，毫秒为单位 */
	ulong				utc;			        /* 对应的UTC(1970-1-1 00:00:00)秒数 */
	ushort				utcms;			        /* UTC时间对应的毫秒数 */
    VideoAnalysePacket  analysePacket;          /* 帧数据缓存 */
        
	ANALYSE_video_t *pVideo;

	ANALYSE_base_t baseInfo;

	ANALYSER_regionInfo_t ivsRegion;
	ANALYSER_regionInfo_t flushRegion;
	struct timespec regionTime;
	VideoObject oriObj[ANALYSER_OBJ_NUM];

	VI_PIPE viPipe;             /* vi group 编号 */
    VI_CHN viChn;               /* vi channel 编号 */
    VI_CHN_ATTR_S viChnAttr;    /* vi 物理通道静态属性 */

    VI_PIPE viSecPipe;             /* vi group 编号 */
    VI_CHN viSecChn;               /* vi channel 编号 */
    VI_CHN_ATTR_S viSeAttr;     /* vi 物理通道静态属性 */

    VIDEO_picSize_t algSize;

    int sensorId;
    int upgradeFlg;

    //RSHandle bodyDetHandle;
    //RSHandle faceDetHandle;
    RSContext rsHandle;

    rockx_handle_t rockFaceDetHd;

    rockx_handle_t rockPersonDetHd;
    
	pthread_mutex_t mutex;
	pthread_t algThd;

    Rect_ext stSrcRect;   /* show image w,h  */
    Rect_ext stCropRect;    /* show image befor crop x,y,w,h  */
    int      iIsCrop;       /* crop flag  */
    int      iCurSensorIdforDetectResult;  /* detect sensor image:0-->zoom-sensor  1-->fixed-sensor */
} ANALYSER_ctl_t;


/* 遮挡检测结构体 */
typedef struct
{
    /* 使能开关，是否使能，为1表示使能，为0时表示禁用，其他参数被忽略。*/
    unsigned int enable;

    /* 遮挡检测缓存虚拟地址和物理地址。*/
    void *pVirtDst; 
    void *pPhyDst;  
} DETECT_blindCtl_t;

/* 运动检测结构体 */
typedef struct
{
    /* 动检算法句柄，使用海思自带动检时为NULL */
    void *hAlg;

    /* 动检图像信息 */
    //IVE_IMAGE_S image[2]; 

    /* sad信息 */
    //IVE_DST_IMAGE_S stSad;

    /* 区域信息 */
    //IVE_DST_MEM_INFO_S stBlob;

    /* 动态监测前后帧数据地址索引 */
    unsigned int index;                   

    /* 上一次使能状态，为1表示使能，为0时表示禁用*/
    char lastEnable;

    /* 使能开关，是否使能，为1表示使能，为0时表示禁用，其他参数被忽略。*/
    char enable;

    /* 动态检测的敏感度档次，等级1-6 */
    char level;

    /* 灵敏度的具体值，暂不使用 */
    char sensitiveness;

    /* 帧间隔，暂不使用 */
    char fieldinterval;

    /* 动态检测的区域，数据的每一位对应一个矩形区域块，置1表示需要在该区域块动
       态检测，置0表示不需要在该区域块动态检测。每一行用一个ulong表示，最左边的
       块对应最低位，从上到下的行对应的下标从0到17。支持的行列数之外对应的数据
       位无效。*/
    ulong win[MD_REGION_ROW];

    /* 面积占用比, 1-100，0 表示此配置无效 */
    uchar volumeRatio;

    /* 动检的残差阈值, 1-100，0 表示此配置无效 */
    uchar subRatio;
    
    /* 使用新的动检模式[0, 表示使用老的模式, 1表示使用新的模式] */
    uchar newMode;    
    
    /* 动检窗口数 */
    uchar windowNum;
    
    /* 动检窗口数组 */
    VideoDetectWindow detectWindows[DETECT_MOTION_WINDOE_NUM];

    /* 人形动检上下文内容 */
    void *pSmdContext;
} DETECT_motionCtl_t;

/* 运测控制结构体 */
typedef struct
{
    unsigned int refCount;              /* detect 接口引用计数 */
    VideoDetector videoDetector;        /* detect 接口结构体 */

    DETECT_blindCtl_t blindCtl;         /* 遮挡检测结构体 */

    DETECT_motionCtl_t motionCtl;       /* 运动检测结构体 */

    VIDEO_picSize_t picSize;            /* 用于动检的图像分辨率 */
    //VPSS_CHN vpssChn;                   /* vpss通道号 */
 } DETECT_ctl_t;




/* ivs帧头信息 */
typedef struct
{
    unsigned char type;         /*ivs类型*/
    unsigned char regionNum;    /*区域个数*/
    unsigned char hlen;
    unsigned char llen;
}IVS_frameHead_t;


/* ivs视频数据输入通道及抓图通道状态 */
typedef enum
{
    IVS_STREAM_START,
    IVS_STREAM_STOP
}IVS_streamState_t;


/* ivs算法状态 */
typedef enum
{
    IVS_ALG_START,
    IVS_ALG_STOP
}IVS_algState_t;

/* 算法图像链路信息 */
typedef struct
{
    unsigned int vpsHeight;             /* 智能vpss通道高 */
    unsigned int vpsWidth;              /* 智能vpss通道宽 */
    unsigned int algHeight;             /* 送算法图像高 */
    unsigned int algWidth;              /* 送算法图像宽 */
    //HI_U32 phy;                         /* vgs二级缩放时的物理地址 */
    //HI_U8 *pVir;                        /* vgs二级缩放时的虚拟地址 */
}IVS_algPicInfo_t;

/* 智能分析 */
typedef struct
{
	ANALYSE_video_t video;
	VIDEO_picSize_t vpsSize;
	//VPSS_LDC_ATTR_S ldcPrms;	
    //HI_U32 frameTimeRef;

    int algPlat;
    int fps;                            /* 算法通道帧率 */
    int oneframe;                       /* jpeg和ivs是否同帧 */
	int vpssEnable;                     /* 智能vpss是否创建 */
    int enRgbCopy;                      /* 是否需要RGB抠图 */
    int enYuvCopy;                      /* 是否需要YUV抠图 */
    //HI_U64 yuvPhyAddr;                  /* YUV抠图数据物理地址 */                                     
    char *pYuvVirAddr;                  /* YUV抠图数据虚拟地址 */
    //HI_U64  bgrCropPhyAddr;             /* RGB抠图数据物理地址 */
	char  *pBgrCropVirAddr;             /* RGB抠图数据物理地址 */
    //HI_U64  bgrDstPhyAddr;              /* RGB目的数据物理地址 */
	char  *pBgrDstVirAddr;              /* RGB目的数据物理地址 */
	pthread_mutex_t snapMutex;
}ANALYSE_videoCtl_t;

/// 码流类型
typedef enum VideoViStream
{
    videoViStreamMain = 0,	///< 主码流
    videoViStreamExtra1,	///< 辅码流1
    videoViStreamExtra2,	///< 辅码流2
    videoViStreamExtra3,	///< 辅码流3
    videoViStreamSnapshot,	///< 抓图
    videoViStreamNumber	///< 种类数
} VideoViStream;

typedef struct
{
    struct list_head list;
    uint64 pts;
    MEDIA_BUFFER mdBuf;
    MEDIA_BUFFER mdResizeBuf;
    int isNocopy;
    StreamInType streamType;
    ENC_ImageRect_t stImageInfo;  

    void* revered;
} COMM_ListInfo_t;

/* VI结构体 */
typedef struct
{
    unsigned int refCount;              /* vi 接口引用计数 */
    VideoInput videoInput;              /* vi 接口结构体 */
    unsigned int viChn;                 /* vi通道号 */
    unsigned int viHeight;              /* vi通道高 */
    unsigned int viWidth;               /* vi通道宽 */ 
    //FISHEYE_ATTR_S fisheyeAttr;         /* 鱼眼属性 */

    pthread_t viMediaThd;                 /* pthread id */
    pthread_t viMediaSecThd;              /* pthread id */

    VI_PIPE       iViPipe;
    VI_CHN        iViChn;
    VI_CHN_ATTR_S stViChnAttr;

    VideoViStream emViStream;

    int     isCrop;
    im_rect imRect;
    im_rect imOrgRect;
    int     isCover;

    BMP_logoInfo_t logoInfo;

    ENC_title_t encTitles[ENC_TITLE_NUM + ENC_BMP_NUM];   /* title控制结构体 */
    VideoTitle  videoTitle;

    /* 保证各模块线性调用 */
    pthread_mutex_t viChnMutex;
    /* 保证各模块线性调用 */
    pthread_mutex_t viSecChnMutex;

    int iEnable;

    int iMenuOsdShow;
    int iMenuOsdLastMirrorStatus;

    struct list_head emptyBuf;         	/* 空闲跟踪队列 */
	struct list_head fullBuf;         		/* 跟踪队列 */
	pthread_mutex_t bufLock;                       /* 队列锁 */
	COMM_ListInfo_t listBuf[5];  	/* 跟踪结果信息 */
	int maxBufLen;
 } VI_ctl_t;

/* VO结构体 */
typedef struct
{
    unsigned int refCount;              	/* vo 接口引用计数 */
    VideoOutput videoOutput;              	/* vo 接口结构体 */

    int voVpssChn;
    int voDev;
    int voChn;
    int voLayer;
    int voMode;                             /* vo分屏模式 */
        
    VideoOutFormat videoOutFormat; 	        /*vo输出类型*/
    int voWidth;                            /* vo输出宽 */
    int voHeight;                           /* vo输出高 */
    int enIntfSync;                         /* 接口时序 */

    int powerPin;                           /* 输出屏电源控制引脚 */
    int powerLevel;                         /* 输出屏电源引脚电平 */

	/*是否支持视频输出功能，0-不支持，1-支持*/
	unsigned int isVideoOut;
} VO_ctl_t; 

/* VO结构体 */
typedef struct
{
    ENC_ImageBufCtrl_t stImageBufCtrl;

    pthread_t          mediaThd;
    int iChnId;
    int iEnable;
} StreamExt_ctl_t;


/* graphics设备 */
typedef struct
{
    int fd;                 /* frame buffer句柄 */
    char devPath[16];       /* frame buffer设备路径 */
    int voIntf;             /* vo输出模式，定义见VO_OUTPUT_1280x1024_60 */

    void *pMmapAddr;        /* frame buffer显存mmap地址 */
    unsigned int memSize;   /* frame buffer显存长度 */

    int	layer;              /* which graphic layer */
    unsigned int height;    /* graphic 通道高 */
    unsigned int width;     /* graphic 通道宽 */
    int	ctrlkey;     /* {0,1,2,3}={1buffer, 2buffer, 0buffer pan display, 0buffer refresh} */
    int	bCompress;   /* image compressed or not */
    int enColorFmt;  /* color format. 定义见GraphicsColorFormat */
} GRAPH_dev_t;


/* Graphics结构体 */
typedef struct
{
    unsigned int refCount;              /* graphic 接口引用计数 */
    GraphicsLayer videoGraphics;        /* graphic 接口结构体 */
    
    unsigned int chn;                   /* graphic 通道号 */
    unsigned int layer;                 /* graphic layer */
    unsigned int height;                /* graphic 通道高 */
    unsigned int width;                 /* graphic 通道宽 */

    GRAPH_dev_t graphDev;               /* 图形层 */
    unsigned int isSupport;             /* 是否支持vo输出 */
} GRAPH_ctl_t;


/*-----------------------VDEC Patrmeter-----------------------*/
typedef enum
{
    DEC_STOP,
    DEC_START,
} DEC_streamState_t;



/* 解码控制结构体 */
typedef struct
{
    unsigned int refCount;      /* 接口引用计数 */
    //unsigned int streamId;      /* 接口编号 */
    VideoDecoder videoDecoder;  /* 接口结构体 */
    DEC_streamState_t decState; /* 码流状态 */
    VIDEO_picSize_t decPicSize; /* 解码输入分辨率 */
    unsigned int fps;           /* 帧率 */
    

    VDEC_CHN vdecChn;          /* vdec通道编号 */
    VDEC_CHN_ATTR_S vdecAttr;  /* vdec参数 */

    unsigned int isCreateVdec; /* 是否创建解码通道  1:创建  0:不创建 */

    struct list_head emptyBuf;         	/* 空闲跟踪队列 */
	struct list_head fullBuf;         		/* 跟踪队列 */
	pthread_mutex_t bufLock;                       /* 队列锁 */
	COMM_ListInfo_t listBuf[5];  	/* 跟踪结果信息 */
	int maxBufLen;

	MEDIA_BUFFER decSendMd[3]; /* 解码数据发送buf */
    uint8_t bufIndex;

    pthread_mutex_t frameLock;
    pthread_cond_t frameCond;
    uint8_t frameComeflg;
}DEC_ctl_t;

typedef struct
{
    BMP_logoInfo_t logoInfo;
    uint64 storePts;
    //StreamInType streamType;
    //int displayChn;  /*流的显示通道,多路osd可区分*/   
}OSD_Info_t;

typedef struct
{
    uint64 storePts;
    StreamInType streamType;
    COMM_ListInfo_t listStreamFrame;
    OSD_Info_t osdStream;
    uint8   multiplexNums;  /*当前路流输出复用次数*/

    pthread_rwlock_t  rwLock;     /* buf读写锁 */
   
} STREAM_composeInfo_t;


/* 流拼接控制结构体 */
typedef struct
{
    STREAM_composeInfo_t decComposeBuf[COMPOSE_MAX_CHN_NUM];    
    
    uint64  newPts[COMPOSE_MAX_CHN_NUM];    /*最新流的时间戳*/

    uint8   userNums[COMPOSE_MAX_CHN_NUM]; /*每使用一次+1，到达使用次数后释放*/

    pthread_mutex_t mutex_run[COMPOSE_MAX_CHN_NUM];
    pthread_cond_t cond_run[COMPOSE_MAX_CHN_NUM];
    int running[COMPOSE_MAX_CHN_NUM];
}STREAM_composeCtl_t;


#if 0
typedef struct
{
    struct list_head list;
    uint64 pts[6];
    MEDIA_BUFFER mdBuf[6];
    MEDIA_BUFFER mdResizeBuf[6];
    int isNocopy[6];
    int releaseFlg[6];
    int vailedNum;    
} STREAM_listBufInfo_t;

typedef struct
{
    struct list_head list;
    uint64 pts;
    MEDIA_BUFFER mdBuf;
} STREAM_composeInfo_t;


/* 流拼接控制结构体 */
typedef struct
{
    struct list_head emptyBuf;         	/* 空闲跟踪队列 */
	struct list_head fullBuf;         	/* 跟踪队列 */
	pthread_mutex_t bufLock;            /* 队列锁 */
	STREAM_listBufInfo_t listBuf[5];  	/* 跟踪结果信息 */

    struct list_head emptyBuf2;         	/* 空闲跟踪队列 */
	struct list_head fullBuf2;         		/* 跟踪队列 */
	pthread_mutex_t bufLock2;               /* 队列锁 */
	STREAM_composeInfo_t listCompose[5];  	/* 跟踪结果信息 */
	
    //STREAM_listBufInfo_t *pListFrame;

   // MEDIA_BUFFER pBuffer;

    //int displayChn;                     /*流的显示通道*/

}STREAM_composeCtl_t;
#endif






/* 主板类型 */
typedef enum
{
    VIDEO_BOARD_MASTER = 0, /* 海思芯片做为主控板芯片 */
    VIDEO_BOARD_SLAVE = 1,  /* 海思芯片做为前端板芯片 */
    VIDEO_BOARD_INVALID    /* 无效主板类型 */
} VIDEO_boardType_t;


typedef struct
{
    /* 是否需要退出 */
    unsigned int needExit;
    
    /* 算法测试线程 */
    pthread_t tdId;
    /* 算法数据文件路径 */
    char dataPath[128];
    unsigned int heigh; /* 图像宽 */
    unsigned int width; /* 图像高 */

    //VIDEO_FRAME_INFO_S *pVideoFrame;
} VIDEO_analyseDebugCtl_t;


/* 畸变矫正类型 */
typedef enum
{
    NO_LDC,
    VPSS_LDC,
    VI_LDC,
}VIDEO_ldcType_t;

/* VPSS信息 */
typedef struct
{
    int vpssGrp;
    int vpssExtChn;
    int width;
    int height;
} VIDEO_vpssInfo_t;

/* VIDEO模块控制结构体 */
typedef struct
{    
    VIDEO_snsType_t snsType;                /* sensor类型 */
    VIDEO_wdrMode wdrMode;                  /* 真实宽动态类型 */             
    VIDEO_standard_t standard;              /* 图像制式 */
    VIDEO_resolution_t resolution;          /* 图像分辨率 */ 
    VIDEO_resolution_t maxResolution;       /* 最大图像分辨率 */ 

    int stitch;                             /* 是否为双目拼接模式 */
    float maxFps;                           /* sensor最大帧率 */
    float fps;                              /* sensor帧率 */
    SYS_cpuType_t cpuType;                  /* cpu类型 */
    /* h264 h265编码缓存缩小因子, 对于特定功能裁减的设备合理减小编码缓存 */
    float vencBufRate;
    /* h264 h265编码缓存缩小因子, 对于特定功能裁减的设备合理减小编码缓存  */
    float mjpegBufRate;                     /* mjpeg编码缓存缩小因子 */
    VIDEO_boardType_t boardType;            /* 主板类型 */
    int dayNightSwitchMask;                 /* 支持日夜切换的类型掩码，定义见VideoDayNightSwitchMode */
    int wideDynamicRange;                   /* 支持的宽动态模式，0-不支持, 1-数字宽动态，2-真实宽动态 */
    char lenName[32];                       /* 镜头名 */     
    int electricFocus;                      /* 是否支持电动变焦，0-不支持，1-支持 */
    int smartIr;                            /* 是否支持smartIr，0-不支持，1-支持 */
	int smartIrMask;                        /* 支持smartIr灯的类型掩码, 定义见VideoSmartIrType */
	int pIntraRefresh;                      /* 是否支持p帧帧内刷新 0-不支持，1-支持 */
	VIDEO_ldcType_t ldc;                    /* 持畸变校正类型 */  
	int ispStart;                           /* isp启动状态 */ 

	unsigned int viVpssMode;                /* vi-vpss离在线模式 */ 

	VIDEO_lenInfo_t lenInfo;                /* 镜头相关信息 */  

	VENC_GOP_ATTR_S stGopAttr;              /* 编码gop结构 */ 
    
	int softwareVer;                         /* 基线版本 */           
    
    /* 是否开启真实宽动态，0-不开启，1-开启 */
    unsigned int wdrEnable;
 
    /* 保证各模块线性调用 */
    pthread_mutex_t videoMutex;

    /* 保证通道操作线性 */
    pthread_mutex_t encodeMutex;

    /* 通道控制结构体指针数组 */
    ENC_ctl_t *pEncCtls[VENC_MAX_CHN_NUM];

    ENC_cover_t encCovers[ENC_COVER_NUM]; /* cover控制结构体 */

    ENC_waterMark_t waterMark;            /* 水印控制结构体 */

    /* osd缓存，所有通道共用同一个缓存 */
    unsigned char *pTitleBuf;

    /* 视频遮挡区域的像素点 */
    unsigned int coverNums; 

    /* 保证视频分析接口线性调用 */
    pthread_mutex_t analyserMutex;

	/* 视频分析控制结构体 */
    ANALYSE_videoCtl_t *pVanalyse;

    /* 保证动检接口线性调用 */
    pthread_mutex_t detectMutex; 

    /* 动检控制结构体 */
    DETECT_ctl_t *pDetectCtl;

    /* 应用程序申请缓存虚拟地址和物理地址。*/
    void *pVirtDst[VIDEO_MMZ_BUF_NUM]; 
    unsigned long long phyDst[VIDEO_MMZ_BUF_NUM];               

    /* 是否开启镜像功能，0-不开启，1-开启 */
	unsigned int mirror;

    /* 是否开启翻转功能，0-不开启，1-开启 */
	unsigned int flip;

	/* 是否支持旋转功能，0-不支持 1-支持 */
	unsigned int isRotate;

	/* 是否开启旋转功能，0-不旋转，1-顺时针90°，3-逆时针90°*/
	unsigned int rotate;

    int needIsp;	    /* 标志是否开启ISP */
    VIDEOISP_ctl_t *pVideoIsp;/* isp接口指针 */
    VIDEOISP_ctl_t *pVideoSecIsp;/* isp接口指针 */

    /* 保证VI接口线性调用 */
    pthread_mutex_t viMutex;

    /* VI结构体 */
    VI_ctl_t *pViCtl[MAX_VI_SUPPORT_CHN];

    /* 保证VO接口线性调用 */
    pthread_mutex_t voMutex;	

    /* VO结构体 */
    VO_ctl_t *pVoCtl;
    int voWidth;
    int voHeight;

    /* Graphics结构体 */
    GRAPH_ctl_t *pGraphCtl;
    /* Graphics结构体 */
    pthread_mutex_t graphMutex;

    /* mmz物理地址与映射地址偏移量 */
    int mmzAddrOffset;
    unsigned int mmzLen;

    unsigned int vpsChnState;  

    /* 当前是否为闪光帧模式 */
    int flashMode;

    /* 保证抓拍闪光帧线性调用 */
    pthread_mutex_t flashMutex;

    /* 是否开启调试 */
    unsigned int isDebug;

    /* 视频输入通道 */
    unsigned int viChnNum;
    /* 视频输入模式 */
    VideoInputMode viMode;

    /* 是否是鱼眼设备 */
    unsigned int isFisheye;
	
	/* 是否支持avbr编码 */
    unsigned int supportAvbr;

    
    /* 是否支持jpeg转rgb */
    unsigned int jpeg2RgbEn;
    unsigned int jpegMaxWidth;                  /* jpeg数据最大宽度 */
    unsigned int jpegMaxHeight;                 /* jpeg数据最大高度 */
    unsigned long  yuvPhyAddr;                   /* YUV数据物理地址 */
	char  *pYuvVirAddr;                        /* YUV数据物理地址 */
    unsigned long  bgrPhyAddr;                   /* RGB抠图数据物理地址 */
	char  *pBgrVirAddr;                        /* RGB抠图数据物理地址 */
    unsigned long  bgrDstPhyAddr;                   /* RGB目的数据物理地址 */
	char  *pBgrDstVirAddr;                        /* RGB目的数据物理地址 */
    pthread_mutex_t jpeg2rgbMutex;              /* 保证jpeg转rgb接口调用 */

    VIDEO_analyseDebugCtl_t *pAnalyseDebugCtl;

    /* ivs是否已经初始化 */
    unsigned int isIvsInit;

    /* 是否进行isp调试模式 */
    unsigned int ispdebug;

    /* 智能抓图osd缓存 */
    unsigned char *pAlgTitleBuf;

    int ledGpio;
    int ledLevel;

    int dirAngle;

    int haveHwid;
    int speakerTest;

    unsigned int mirrorCfg;

    pthread_mutex_t cropLock;
	pthread_cond_t cropBlk;
	int cropFlg;

	int videoOut;
	int supportDir;
	int voStatus;

    pthread_t voDetectThd;
    StreamExt_ctl_t stStreamExtCtrl[VIDEO_STREAM_MAX_CHN_NUMBER];

    int iPipStatus; /* picture in picture status */
    int iAiMode;    /* iAiMode  */

    int iMenuAllShow;
    int iMenuMirrorAllLastStatus;

    VideoInRoiCfg stRoiCfg;

    
    /* 解码通道控制结构体指针数组 */
    DEC_ctl_t *pDecCtls[VDEC_MAX_CHN_NUM];
    /* 保证通道操作线性 */
    pthread_mutex_t decodeMutex[VDEC_MAX_CHN_NUM];
    /* 解码通道创建个数 */
    int createDecNum;

    /* 视频拼接控制结构体指针数组 */
    STREAM_composeCtl_t* pComposeCtl;
    /* 保证通道操作线性 */
    pthread_mutex_t composeMutex;

    int viChnIndex;
	char ispDeviceName[MAX_VI_SUPPORT_CHN][16];
} VIDEO_ctl_t;


/* VO信息 */
typedef struct
{
    int layer;          /* 对应的图形层 */
    int width;          /* 图形层宽 */
    int height;         /* 图形层高 */
    int isSupport;      /* 是否支持vo输出 */
} VO_info_t;

/*电子变倍框或人脸检测框转化参数*/
typedef struct
{
    int xBlk;
    int yBlk;
    int wBlk;
    int hBlk;
}ENC_cropBlk_t;

/*=============================================================================
                             extern  Variables                                  
==============================================================================*/
extern VIDEO_ctl_t videoCtl_g;


/*=============================================================================
                             Function Definition                                  
==============================================================================*/ 

/*******************************************************************************
  Function:     VIDEO_SetMipiAttr
  Description:  设置mipi属性
  Input:        无
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
//HI_S32 VIDEO_SetMipiAttr(void);

/*******************************************************************************
  Function:     VIDEO_MppInit
  Description:  mpp初始化
  Input:        无
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int VIDEO_MppInit(void);

/*******************************************************************************
  Function:     VIDEO_MppDeInit
  Description:  mpp注销
  Input:        无
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int VIDEO_MppDeInit(void);

/*******************************************************************************
  Function:     ENC_GetPicSize
  Description:  获取编码通道分辨率
  Input:        无
  Output:       -pStreamNum: 码流数
                -pStreamParam: 辅码流的分辨率
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int ENC_GetPicSize(unsigned int *pStreamNum, IVS_streamParam_t *pStreamParam);

/*******************************************************************************
  Function:     VIDEO_GetResolution
  Description:  根据宽高获取分辨率类型
  Input:        - picSize: 图像尺寸
                - bRotate: 是否发生旋转
                - standard: 图像制式
  Output:       - pResolution: 分辨率类型
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int VIDEO_GetResolution(VIDEO_picSize_t *pPicSize, 
                        int bRotate, 
                        VIDEO_standard_t standard,
                        VIDEO_resolution_t *pResolution);

 
/*******************************************************************************
  Function:     ENC_ResetCover
  Description:  重新设置视频遮挡。
  Input:        - pCover: 视频遮挡参数
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int ENC_ResetCover(VideoCover *pCover);

/*******************************************************************************
  Function:     ENC_SetLdc
  Description:  主码流通道设置畸变矫正
  Input:        - pLdcParam: 畸变矫正参数
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
//int ENC_SetLdc(VPSS_LDC_ATTR_S *pLdcParam);

/*******************************************************************************
  Function:     ANALYSER_PrivSetMirror
  Description:  配置智能通道镜像与反转状态
  Input:        无                
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int ANALYSER_PrivSetMirror(void);

/*******************************************************************************
  Function:     ANALYSER_SetLdc
  Description:  智能数据通道设置畸变矫正
  Input:        - pLdcParam: 畸变矫正参数              
  Output:       - 无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
//int ANALYSER_SetLdc(VPSS_LDC_ATTR_S *pLdcParam);

/*******************************************************************************
  Function:     VIDEO_RegRecordCmd
  Description:  注册调试命令
  Input:        无
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int VIDEO_RegCmd(void);

/*******************************************************************************
  Function:     DETECT_RecreateChn
  Description:  重建动检vpss通道
  Input:        NULL
  Output:       NULL
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int DETECT_RecreateChn(void);

/*******************************************************************************
  Function:     ENC_DestroyVencAll
  Description:  销毁所有编码通道
  Input:        无
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int ENC_DestroyVencAll(void); 

/*******************************************************************************
  Function:     VIDEO_JudgeFlashFrame
  Description:  判断raw数据帧是否为闪光帧
  Input:        - pFrame: 帧数据信息 
  Output:       无
  Return:       0:不是闪光帧
                1:是闪光帧
                <0:操作失败
  Others:       无
*******************************************************************************/
//int VIDEO_JudgeFlashFrame(VIDEO_FRAME_INFO_S *pFrame);

/*******************************************************************************
  Function:     VIDEO_GetRawData
  Description:  获取前端raw数据
  Input:        无 
  Output:       无
  Return:       0:成功
                <0:失败
  Others:       无
*******************************************************************************/
//int VIDEO_GetRawData(VIDEO_FRAME_INFO_S *pFrame);

/*******************************************************************************
  Function:     VIDEO_PutRawData
  Description:  释放前端raw数据
  Input:        无 
  Output:       无
  Return:       0:成功
                <0:失败
  Others:       无
*******************************************************************************/
//int VIDEO_PutRawData(VIDEO_FRAME_INFO_S *pFrame); 

/*******************************************************************************
  Function:     ANALYSER_TriggerFlash
  Description:  触发闪光帧
  Input:        无
  Output:       无
  Return:        0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int ANALYSER_TriggerFlash(void);

/*******************************************************************************
  Function:     ENC_GetVpssInfo
  Description:  获取vpss信息
  Input:        - viChn: vi通道号
  Output:       - pVpssInfo: vpss信息
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int ENC_GetVpssInfo(int viChn, VIDEO_vpssInfo_t *pVpssInfo);

/*******************************************************************************
  Function:     VIDEO_GetPicSize
  Description:  根据图像分辨率获取vb大小
  Input:        - standard: 制度
                - resolution: 图像分辨率
                - pstSize: 图像尺寸
                - u32AlignWidth: 字节对齐
  Output:       无
  Return:       >0: vb大小
                -1: 操作失败
  Others:       无
*******************************************************************************/
/*int VIDEO_CalcPicVbBlkSize(VIDEO_standard_t standard, 
                                  VIDEO_resolution_t resolution, 
                                  PIXEL_FORMAT_E enPixFmt, 
                                  HI_U32 u32AlignWidth,
                                  int bRotate);*/


/*******************************************************************************
  Function:     VO_Create
  Description:  创建并使能vo通道
  Input:        无
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int VO_Create(void);


/*******************************************************************************
  Function:     VO_Destroy
  Description:  销毁vo通道
  Input:        无
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       ?T
*******************************************************************************/
int VO_Destroy(void);


/*******************************************************************************
  Function:     VO_GetInfo
  Description:  获取vo通道信息
  Input:        无
  Output:       - pVoInfo: vo信息
  Return:       0: 操作成功
                -1: 操作失败
  Others:       ?T
*******************************************************************************/
int VO_GetInfo(VO_info_t *pVoInfo);


/*******************************************************************************
  Function:     GPRAH_Create
  Description:  创建并使能Graphics
  Input:        无
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int GPRAH_Create(void);

/*******************************************************************************
  Function:     ENC_SetSnapTitle
  Description:  设置抓图osd
  Input:        - vencChn: 编码通道
                - pTitle:标题结构体指针信息
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/                     
int ENC_SetSnapTitle(int vencChn, ANALYSE_title_t *pTitle);






#if 1
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
//保存文件到pathname，O_TRUNC表示打开已存在的文件，并清除文件
//len = 0;为关闭文件，使用如:video_FILE_Write("/root/test.dav", pData, dataLen);
static int video_FILE_Write(char *pathname, char *buf, int len) 
{
    static int fd = -1;
    int ret = 0;

    if (fd < 0)
    {
        fd = open(pathname, O_RDWR | O_CREAT | O_TRUNC, 0666);
        if (fd < 0)
        {
            printf("err: open %s fail, try again!\n", pathname);
            return -1;
        }
    }

    if (len == 0)
    {
        close(fd);
        fd = -1;
        printf("close %s\n", pathname);
        return 0;
    }

    ret = write(fd, buf, len);
    if (ret <= 0)
    {
        printf("err: write %s fail\n", pathname);
        return -1;
    }
    return 0;
}
#endif


#ifdef __cplusplus
 }
#endif

#endif  /*VIDEO_PRIV_H*/

